package com.dtx.day06.dynamicProxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.time.LocalDateTime;
import java.util.Arrays;

@Deprecated
public class LoggerInvocationHandler implements InvocationHandler {

    private Object target;

    public LoggerInvocationHandler(Object target) {
        this.target = target;
    }

    /**
     *   拦截 目标对象 需要代理的方法，invoke 返回 目标对象的返回值
     * @param proxy   代理对象，一般没有什么用处
     * @param method   代理的 目标对象的 方法
     * @param args      代理的 目标对象的 方法 需要的 参数列表
     * @return
     * @throws Throwable
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 获取当前系统时间，获取方法名，获取参数
        StringBuilder sb = new StringBuilder();
        sb.append("执行时间"+ LocalDateTime.now())
                .append(",执行的方法是"+method.getName())
                .append("，传入的参数是"+ Arrays.toString(args));

        // 调用 目标对象的 方法，需要一个目标对象
        Object invoke = method.invoke(target, args);
        sb.append("返回结果" + invoke);
        System.out.println(sb);
        return invoke;
    }
}
